#include <stdio.h>
#include <memory.h>
#include <iostream>
#include <math.h>
using namespace std;
// 声明一个结构体类型 Books
int nums[25][5] = {};
int use[25];
int useIndex = 0;
int arrayLen = 0;
int gameIndex = 1;

void initial()
{
    int i, j;
    for (i = 0; i < 25; i++)
    {
        for (j = 0; j < 5; j++)
        {
            nums[i][j] = 0;
        }
        use[i] = -1;
    }
    useIndex = 0;
    arrayLen = 0;
}

bool isCanAdd(int item[5], int n, int i)
{
    if (arrayLen == 0)
    {
        return true;
    }
    int addLine = (int)floor((float)useIndex / (float)n);
    bool result = true;
    if (addLine != 0)
    {
        int addQueTop = nums[use[(addLine - 1) * n + useIndex % n]][2];
        result = addQueTop == item[0];
    }
    if (useIndex % n != 0 && result)
    {
        int addQueLeft = nums[use[(addLine)*n + useIndex % n - 1]][1];
        result = result && addQueLeft == item[3];
    }
    if (result) {
        for (int j = 0; j < useIndex; j++)
        {
            if (use[j] == i)
            {
                return false;
            }
        }
    }
    return result;
}
bool hasResult(int n)
{
    if (n == 1)
    {
        return true;
    }
    for (int i = 0; i < n * n; i++) {
        /* code */
        for (int j = 0; j < arrayLen; j++)
        {
            if (nums[i][4] == 0) {
                continue;
            }
            if (!isCanAdd(nums[i], n, i)) {
                continue;
            }
        }
    }
    
    for (int i = 0; i < arrayLen; i++)
    {
        if (nums[i][4] == 0)
        {
            break;
        }
        if (!isCanAdd(nums[i], n, i))
        {
            continue;
        }
        int addTimes = nums[i][4] + useIndex < n * n ? nums[i][4] : (n * n - useIndex);
        for (int j = 0; j < addTimes; j++)
        {
            use[useIndex] = i;
            useIndex++;
        }
        if (useIndex == n * n || hasResult(n))
        {
            return true;
        }
        for (int j = 0; j < addTimes; j++)
        {
            useIndex--;
            use[useIndex] = -1;
        }
    }
    return false;
}

int test() {
    int n;
    while (cin >> n) {
        for (int i = 0; i < n * n; i++) {

        }
    }
}
int main()
{
    int n, u, r, l, b;
    while (cin >> n)
    {
        initial();
        for (int i = 0; i < n * n; i++)
        {
            cin >> u >> r >> b >> l;
            for (int k = 0; k < i; k++)
            {
                if (nums[k][0] == u && nums[k][1] == r && nums[k][2] == b && nums[k][3] == l)
                {
                    nums[k][4] += 1;
                    break;
                }
                if (k == i - 1)
                {
                    nums[arrayLen][0] = u;
                    nums[arrayLen][1] = r;
                    nums[arrayLen][2] = b;
                    nums[arrayLen][3] = l;
                    nums[arrayLen][4] = 1;
                    arrayLen++;
                }
            }
            if (i == 0)
            {
                nums[arrayLen][0] = u;
                nums[arrayLen][1] = r;
                nums[arrayLen][2] = b;
                nums[arrayLen][3] = l;
                nums[arrayLen][4] = 1;
                arrayLen++;
            }
        }
        if (hasResult(n))
        {
            cout << "Game " << gameIndex << ": Possible" << endl;
        }
        else
        {
            cout << "Game " << gameIndex << ": Impossible" << endl;
        };
        gameIndex++;
    }
    return 0;
}